// @ts-nocheck
import Vue from 'vue'
import { Toast } from 'vant'

const TOKEN_USER = 'TOKEN_USER'

Vue.use(Toast)
// 第一层 :
import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { removeItem } from '@/utils/storage'

const instance = axios.create({
  baseURL: 'http://toutiao.itheima.net/',
})

// 添加请求拦截器 (拦截所有的请求)
// 所有的请求都需要添加token吗?
// 并不是所有的请求 都需要添加token
// 也比不是所有的请求发送之前就有了token
// 之前判断, 是否有token, 换个说法, 是否登录了
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // TODO:
    const { user } = store.state
    if (user.token) {
      // if (user.token && config.url.startsWith('/my')) {
      config.headers.Authorization = `Bearer ${user.token}`
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    // TODO: 处理token 失效问题
    // 前端与后端 约定 1000000011 => token失效
    if (error.response.data.message === 'token超时或者未传token' && error.response.status === 401) {
      //1 提示
      //1.1 this.$toast 场景 : 组件实例
      // this.$toast.fail('token失效了')
      //1.2 Toast 场景 : 工具里面 utils/api
      Toast.fail('token失效了')

      //2. 因为本地的token已经失效了, 删除吧
      removeItem(TOKEN_USER)

      //3. 跳转到登录页
      // this.$router.push('/login')
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

export default instance
